package com.dstz.form.rest.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.dstz.base.api.aop.annotion.CatchErr;
import com.dstz.base.api.response.impl.ResultMsg;
import com.dstz.base.core.util.StringUtil;
import com.dstz.form.manager.FormCustSqlViewManager;
import com.dstz.form.model.custsql.FormCustSql;
import com.dstz.form.request.IdRequest;
import com.dstz.form.request.SqlViewRequest;
import com.dstz.form.vo.SqlViewDataVO;
import com.dstz.form.vo.SqlViewVO;

/**
 * @description:自定义列表浏览控制层
 * @company:宇宙大魔王
 * @author:xianggang
 * @date:2019-08-31 12:21:58
 */
@RestController
@RequestMapping("/form/formCustSql/view")
public class FormCustSqlViewController {
	
	protected Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Resource
	FormCustSqlViewManager formCustSqlViewManager;
	
	/**
	 * 根据别名获取自定义sql对象
	 * @param code
	 * @return
	 * @return ResultMsg<FormCustSql>
	 * @author xianggang
	 * @date 2019年9月4日 上午9:57:14
	 */
	@RequestMapping("/vo_{code}")
	@CatchErr
	public ResultMsg<FormCustSql> getVo(@PathVariable("code") String code) {
		
		logger.info("根据别名获取自定义sql对象,code:{}", code);
		
		return formCustSqlViewManager.getVo(code);
		
	}
	
	/**
	 *  自定义列表-数据查询
	 * @param code
	 * @param request
	 * @return
	 * @return ResultMsg<SqlViewDataVO>
	 * @author xianggang
	 * @date 2019年9月4日 上午9:57:10
	 */
	@RequestMapping("/list_{code}")
	@ResponseBody
	@CatchErr
	public ResultMsg<SqlViewDataVO> listData(@PathVariable("code") String code, @RequestBody SqlViewRequest request) {
		
		logger.info("自定义列表-数据查询,code:{}", code);
		
		if (StringUtil.isEmpty(code)) {
			return ResultMsg.ERROR("编码不能为空");
		}
		
		request.setCode(code);
		
		return formCustSqlViewManager.listData(request);
	}
	
	/**
	 * 自定义列表-数据查询SQL
	 * @param code
	 * @param request
	 * @return
	 * @return ResultMsg<SqlViewVO>
	 * @author xianggang
	 * @date 2019年9月4日 上午9:57:05
	 */
	@RequestMapping("/sql_{code}")
	@ResponseBody
	@CatchErr
	public ResultMsg<SqlViewVO> listDataSql(@PathVariable("code") String code, @RequestBody SqlViewRequest request) {
		
		logger.info("自定义列表-数据查询,code:{}", code);
		
		if (StringUtil.isEmpty(code)) {
			return ResultMsg.ERROR("编码不能为空");
		}
		
		request.setCode(code);
		
		return formCustSqlViewManager.listDataSql(request);
	}
	
	/**
	 *  自定义列表-数据导出
	 * @param code
	 * @param request
	 * @param response
	 * @return
	 * @return ResultMsg<String>
	 * @author xianggang
	 * @date 2019年9月4日 上午9:57:01
	 */
	@RequestMapping("/export_{code}")
	public ResultMsg<String> export(@PathVariable("code") String code, SqlViewRequest request,
	        HttpServletResponse response) {
		
		if (StringUtil.isEmpty(code)) {
			logger.error("编码不能为空");
			return ResultMsg.ERROR("编码不能为空");
		}
		request.setCode(code);
		return formCustSqlViewManager.exportData(request, response);
	}
	
	/**
	 * 自定义列表-事件按钮方法
	 * @param code
	 * @param buttonAlias
	 * @return
	 * @return ResultMsg<String>
	 * @author xianggang
	 * @date 2019年9月4日 上午9:56:57
	 */
	@RequestMapping("/changeData_{code}_{buttonAlias}")
	public ResultMsg<String> changeData(@PathVariable("code") String code,
	        @PathVariable("buttonAlias") String buttonAlias, @RequestBody IdRequest request) {
		
		if (StringUtil.isEmpty(code)) {
			logger.error("编码不能为空");
			return ResultMsg.ERROR("编码不能为空");
		}
		
		if (StringUtil.isEmpty(buttonAlias)) {
			logger.error("按钮别名不能为空");
			return ResultMsg.ERROR("按钮别名不能为空");
		}
		
		String id = request.getId();
		if (StringUtil.isEmpty(id)) {
			logger.error("ID不能为空");
			return ResultMsg.ERROR("ID不能为空");
		}
		
		return formCustSqlViewManager.changeData(code, buttonAlias, id);
		
	}
	
}
